From b07b273e641b3541c4553e88cd3ac7938497c126 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=C3=98yvind=20Kol=C3=A5s?= Date: Sat, 10 Dec 2016 16:10:45 +0100 Subject: [PATCH] extensions/simple: improve u16 fast paths --- extensions/simple.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/extensions/simple.c b/extensions/simple.c index 31ec455..1430ab1 100644 --- a/extensions/simple.c +++ b/extensions/simple.c @@ -240,7 +240,7 @@ u32_to_float_x2 (unsigned char *src_char, unsigned char *dst_char, long samples) static inline long u16_to_float (unsigned char *src_char, unsigned char *dst_char, long samples) { - uint32_t *src = (uint32_t *)src_char; + uint16_t *src = (uint16_t *)src_char; float *dst = (float *)dst_char; long n = samples; while (n--) @@ -274,6 +274,24 @@ u16_to_float_x2 (unsigned char *src_char, unsigned char *dst_char, long samples) return samples; } +static inline long +yau16_rgbaf (unsigned char *src_char, unsigned char *dst_char, long samples) +{ + uint16_t *src = (uint16_t *)src_char; + float *dst = (float *)dst_char; + long n = samples; + while (n--) + { + dst[0] = src[0] / 65535.0f; + dst[1] = src[0] / 65535.0f; + dst[2] = src[0] / 65535.0f; + dst[3] = src[1] / 65535.0f; + dst +=4; + src +=2; + } + return samples; +} + int init (void) @@ -520,6 +538,10 @@ init (void) "linear", u16_to_float_x3, NULL); - + babl_conversion_new (babl_format ("Y'A u16"), + babl_format ("R'G'B'A float"), + "linear", + yau16_rgbaf, + NULL); return 0; } -- 2.30.2